package com.idudiao.sc.common.core.validator;

import cn.hutool.core.util.StrUtil;
import com.idudiao.sc.common.core.validator.constraints.Account;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 账号校验逻辑
 *
 * @author xushuai
 * @since 2019/2/28 11:29
 */
public class AccountValidator implements ConstraintValidator<Account, String> {

    /**
     * 1、账号中不得含有除数字、字母、“-”之外的字符，且不得使用全角字符。
     * 2、账号字段不得全部为连续相同的数字，例如“11111111111111”等。
     */
    private static final String VALIDATOR_CHAR = "^[a-zA-Z0-9-]+$";

    @Override
    public void initialize(Account constraintAnnotation) {

    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (StrUtil.isBlank(value)) {
            return true;
        }
        Pattern p = Pattern.compile(VALIDATOR_CHAR);
        Matcher m = p.matcher(value);
        if (m.find()) {
            return !isContinuous(value);
        }
        return false;
    }

    /**
     * 判断字符是否是连续的
     *
     * @param value
     * @return
     */
    private boolean isContinuous(String value) {
        if (StrUtil.isBlank(value)) {
            return false;
        }
        int j = 0;
        String oneChar = String.valueOf(value.charAt(0));
        for (int i = 0; i < value.length(); i++) {
            if (oneChar.equals(String.valueOf(value.charAt(i)))) {
                j++;
            }
        }
        if (j == value.length()) {
            return true;
        } else {
            return false;
        }
    }


}
